package equals

/**
  * Created by root on 16-1-12.
  */
class Equals(val value:Int) {

  override def equals(that: Any): Boolean = that match {
    case that: Equals => value == that.value
    case _  => false
  }
}

object Equals{

  /**
    * java中的==和scala中的==是有区别的,java中的==除基本类型外,引用类型是比较两个对象在JVM堆中的地址.
    * 在scala中,==,!=,equals,hashCode定义在顶端类Any中,所以在Any中eq/ne/==/!=这几个方法被定义为final,
    * ==方法调用的是equals方法,所以重写equals对==有效.
    * scala中的eq方法和java中的==就是等效的.
    * 重写equals的时候最好把hashCode也重写了,因为在HashMap这一系列Hash数据类型中,
    * 是使用hashCode分配位置和判断一个elem是否在一个collection中的.
    * Any中的==定义如下:
    * final def ==(that:Any):Boolean = if(null eq this){null eq that} else {this equals that}
    */
  def main(args: Array[String]) {
    val a = new Equals(1)
    val b = new Equals(1)
    println(a == b)
    println(a eq b)
  }
}